/*
 * Title: arm-ifconfig
 * Brief: Bring up eth0 and assign it the address 192.168.0.2
 * Author: Daniel Godas-Lopez <gmail account dgodas>
 */

	/*
	  soc_des = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
	 */

	mov %r0, $2		/* AF_INET */
	mov %r1, $2		/* SOCK_DGRAM */
	mov %r2, $0		/* IPPRTOTO_IP */
	push {%r0, %r1, %r2}
	mov %r0, $1		/* socket */
	mov %r1, %sp
	svc 0x00900066
	add %sp, %sp, $12

	mov %r6, %r0		/* r6 = soc_des */

	/*
	  ioctl(soc_des, SIOCSIFADDR, &req);
	 */

.if 0 /* r0 == r6 already */
	mov %r0, %r6		/* soc_des */
.endif

	sub %r1, %r1, %r1
	sub %r2, %r2, %r2
	push { %r1, %r2 }
	mov %r2, $2		/* AF_INET */
	mov %r3, $0x2000000
	add %r3, %r3, $0xa800
	add %r3, $0xc0		/* addr = 192.168.0.2 */
	push { %r2, %r3 }
	sub %r2, %r2, %r2
	sub %r3, %r3, %r3
	push { %r1, %r2, %r3 }
	mov %r3, $0x7400
	add %r3, $0x0065
	mov %r4, $0x3000
	add %r4, $0x0068
	add %r3, %r4, lsl $16	/* "eth0" */
	push { %r3 }
	mov %r2, %sp		/* struct __kernel_ifreq */
	add %sp, $32

	mov %r1, $0x8900
	add %r1, %r1, $0x16	/* SIOCSIFADDR */
	svc 0x00900036

	/*
	  ioctl(soc_des, SIOCGIFFLAGS, &req);
	 */

	mov %r0, %r6		/* soc_des */

	mov %r1, $0x8900
	add %r1, %r1, $0x13	/* SIOCGIFFLAGS */
	svc 0x00900036

	ldr %r3, [%r2, $16]
	orr %r3, %r3, $1
	str %r3, [%r2, $16]	/* ifr_flags |= IFF_UP */

	/*
	  ioctl(soc_des, SIOCSIFFLAGS, &req);
	 */

	mov %r0, %r6		/* soc_des */

	mov %r1, $0x8900
	add %r1, %r1, $0x14	/* SIOCSIFFLAGS */
	svc 0x00900036
